package com.xyoto.community.service;

import com.xyoto.community.dto.PageDTO;
import com.xyoto.community.dto.SearchUserDTO;
import com.xyoto.community.dto.UpdateUserInfoDTO;
import com.xyoto.community.entity.main.User;
import com.xyoto.community.po.UserPO;
import com.xyoto.community.utils.Result;
import org.springframework.web.multipart.MultipartFile;
import com.xyoto.community.utils.Result;
import com.xyoto.community.utils.Result;

/**
 * ClassName:   用户Service接口
 * Author:      挽风
 * Date:        2020
 * Copyright:   2020 by 挽风1.0版本
 * Description:
 **/
public interface UserService {

    /**
     * 根据用户id查询用户头像、昵称
     *
     * @param userId 用户id
     *
     * @return UserPO
     */
    UserPO getUserPartInfoById(Integer userId);

    /**
     * 修改用户头像
     * @param multipartFile
     * @return
     */
    Result updateMyAvatar(MultipartFile multipartFile);

    /**
     * 分页获取我的关注用户信息列表
     *
     * @param pageDTO 分页Query封装
     *
     * @return List
     */
    Result getMyFollowList(PageDTO pageDTO);

    /**
     * 根据用户id获取用户详情信息
     *
     * @param userId 需要查询的用户id
     *
     * @return 用户详情信息
     */
    Result getUserDetailsById(Integer userId);

    /**
     * 修改用户昵称
     * @param nickname
     * @return
     */
    Result updateMyNickname(String nickname);

    /**
     * 修改用户性别
     * @param gender 性别：1男，2女
     * @return
     */
    Result updateGender(Short gender);

    /**
     * 修改用户个性签名
     * @param signature
     * @return
     */
    Result updateMySignature(String signature);

    /**
     * 获取我关注的话题
     * @param pageDTO
     * @return
     */
    Result getMyFollowTopicList(PageDTO pageDTO);

    /**
     * 修改用户出生日期
     * @param birth 出生日期
     * @return
     */
    Result updateMyBirth(String birth);

    /**
     * 获取我的个人资料
     * @return
     */
    Result getUserInfo();

    /**
     * 获取用户的头像，昵称，个性签名，获赞数，粉丝数，关注数，排名
     * @return
     */
    Result getMy();

    /**
     * 分页查询我的动态列表，按照时间倒序
     * @param pageDTO 分页参数
     * @return 动态列表数据
     */
    Result getMyDynamicListByUserId(PageDTO pageDTO);

    /**
     * 分页查询我的粉丝列表
     * @param pageDTO
     * @return
     */
    Result getMyFansList(PageDTO pageDTO);

    /**
     * 根据用户id查询用户动态列表
     * @param pageDTO
     * @param userId
     * @return
     */
    Result getUserDynamicListByUserId(PageDTO pageDTO, Integer userId);

    /**
     * 获取我创建的话题列表
     * @param pageDTO
     * @return
     */
    Result getMyCreateTopicList(PageDTO pageDTO);

    /**
     * 修改当前登录用户的家乡
     * @param homeTown
     * @return
     */
    Result updateMyHomeTown(String homeTown);

    /**
     * 修改用户信息
     * @param updateUserInfoDTO 需要修改的用户信息
     * @return
     */
    Result updateUserInfo(UpdateUserInfoDTO updateUserInfoDTO);

    /**
     * 获取我的互动消息列表
     * @return
     */
    Result getMyInteractMessage(PageDTO pageDTO);

    /**
     * 获取用户热度在前20的用户信息
     * @author 廖振辉
     * @return {@link Result}
     */
    Result getUserRankByHot();

    /**
     * 获取我在用户活跃度总榜的排名
     * @author 廖振辉
     * @return {@link Result}
     */
    Result getMyHotRank();

    /**
     * 获取所有用户列表
     * @author 廖振辉
     * @param pageDTO 分页对象
     * @return {@link Result}
     */
    Result getAllUserList(PageDTO pageDTO);

    /**
     * 根据用户名搜索用户
     * @author 廖振辉
     * @param searchUserDTO
     * @return {@link Result}
     */
    Result searchUser(SearchUserDTO searchUserDTO);

    /**
     * 获取用户总数
     * @author 廖振辉
     * @return {@link Result}
     */
    Result getTotalUserCount();
}
